// : interfaces/interfaceprocessor/StringProcessor.java
package interfaces.interfaceprocessor;

import java.util.Arrays;

/**
 * @Description: 复用代码的第一种方式是客户端程序员遵循该接口来编写他们自己的类
 * @author: liujiaze
 * @date: 2017年8月31日 下午3:37:52
 */
public abstract class StringProcessor implements Processor {
    public String name() {
        return getClass().getSimpleName();
    }

    public abstract String process(Object input);

    public static String s = "If she weighs the same as a duck, she's made of wood";

    public static void main(String[] args) {
        Apply.process(new Upcase(), s);
        Apply.process(new Downcase(), s);
        Apply.process(new Splitter(), s);
    }
}


class Upcase extends StringProcessor {
    public String process(Object input) { // Covariant return
        return ((String) input).toUpperCase();
    }
}


class Downcase extends StringProcessor {
    public String process(Object input) {
        return ((String) input).toLowerCase();
    }
}


class Splitter extends StringProcessor {
    public String process(Object input) {
        return Arrays.toString(((String) input).split(" "));
    }
} /*
   * Output:
   * Using Processor Upcase
   * IF SHE WEIGHS THE SAME AS A DUCK, SHE'S MADE OF WOOD
   * Using Processor Downcase
   * if she weighs the same as a duck, she's made of wood
   * Using Processor Splitter
   * [If, she, weighs, the, same, as, a, duck,, she's, made, of, wood]
   */// :~
